package string

// 最长不重复的子字符串长度
// 双指针+哈希表
// 时间复杂度on  空间复杂度o1（ASCII字符表）

func LengthOfLongestSubstring(s string) int {
	if len(s) == 0 {
		return 0
	}
	dic := map[byte]int{}
	i := 0
	res := 0
	for j, v := range []byte(s) {
		if _, ok := dic[v]; ok {
			i = max(dic[v], i) // 更新左指针
		}
		dic[v] = j // 记录
		res = max(res, j-i)
	}

	return res
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}
